/* eslint-disable no-nested-ternary */
/* eslint-disable no-prototype-builtins */
/**
 * 克隆
 */
export function deepClone(obj) {
  if (typeof obj !== 'object') return obj || undefined
  const result = Array.isArray(obj) ? [] : {}
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (typeof obj[key] === 'object') {
        result[key] = deepClone(obj[key]) // 递归复制
      } else {
        result[key] = obj[key]
      }
    }
  }
  return result
}
// export function deepClone(data) {
//   if (!data || !(data instanceof Object) || (typeof data == "function")) {
//     return data || undefined;
//   }
//   var constructor = data.constructor;
//   var result = new constructor();
//   for (var key in data) {
//     if (data.hasOwnProperty(key)) {
//       result[key] = deepClone(data[key]);
//     }
//   }
//   return result;
// }

export function merge(into, from) {
  return { ...into, ...from }
}

// 21. `size`：获取不同类型变量的长度
// 这个的实现非常巧妙，利用Blob类文件对象的特性，获取对象的长度。
// 多重三元运算符
export const size = val => (Array.isArray(val)
  ? val.length
  : val && typeof val === 'object'
    ? val.size || val.length || Object.keys(val).length
    : typeof val === 'string'
      ? new Blob([val]).size
      : 0)
// size([1, 2, 3, 4, 5]); // 5
// size('size'); // 4
// size({ one: 1, two: 2, three: 3 }); // 3
